Computer systems often involve downloading applications and data from a server system for use on a client system. The applications or data may be downloaded only once and then stored on the client computer or they may be downloaded each time the application or data is used. In present application download systems, the client computer initiates a launch mechanism for a desired application, and the compressed bits for the entire application are streamed down from the server and onto the client system. The bits are then decompressed, installed, and executed. Such systems allow no overlap between download time and the execution. The client computer waits until the entire application has been downloaded before beginning execution of the program. Also, a client computer utilizes only about twenty percent of an application's total size during a typical user scenario. Thus, about eighty percent of the downloaded application code is unnecessary. While applications are typically cached after they are initially downloaded, the first time download wastes significant bandwidth resources. Also, the time for starting up many applications is extremely long for clients without high-speed connections to servers.
Some systems have used a process called paging, in which an application is split into pages of equal size and each page is downloaded as it is needed by the application. However, such systems often require download of code that is unnecessary because it happens to be on the same page as the requested code. This again wastes bandwidth resources and time. It may also have adverse effects on the operation of the application because the downloaded pages are not arranged in a logical manner.